package com.quanyan.user.service;

import com.quanyan.api.APIResponse;
import com.quanyan.common.user.AppUserCacheInfo;
import com.quanyan.user.model.db.TbUser;
import com.quanyan.user.model.vo.request.*;
import com.quanyan.user.model.vo.response.*;

import java.util.Map;

/**
 * Created by zhang on 16/11/11.
 */
public interface UserLoginService {
    /**
     * 获取验证码
     *
     * @param mobile 手机号
     * @return
     */
    APIResponse getValidCode(String mobile);

    /**
     * 用户注册
     *
     * @param reqUserRegister
     * @return
     */
    APIResponse<RespUserLogin> verifyRegister(ReqUserRegister reqUserRegister);

    /**
     * 用户登录(四种登录方式：手机号码登录，微信登录，微博登录，QQ登录)
     *
     * @param reqUserLogin
     * @return
     */
    APIResponse<RespUserLogin> login(ReqUserLogin reqUserLogin);

    /**
     * 初始化用户cookies
     * @param appUserCacheInfo
     * @return
     */
    RespUserCookiesName appInit(AppUserCacheInfo appUserCacheInfo);

    /**
     * 手机号验证
     * @param map
     * @return
     */
    APIResponse<RespUserSecurity> validateMobile(ReqUserSecurity map);

    /**
     * 修改密码
     * @param reqUserChangePassword
     * @return
     */
    APIResponse changePassword(ReqUserChangePassword reqUserChangePassword);

    /**
     * 验证密码
     * @param uid
     * @param password
     * @return
     */
    APIResponse verifyPassword(int uid, String password);

    /**
     * 获取用户
     * @param reqGetUser
     * @return
     */
    APIResponse<RespUserCookiesName> getUser(ReqGetUser reqGetUser);

    /**
     * 用户账户绑定
     * @param reqUserBinding
     * @return
     */
    APIResponse<RespUserCookiesName> userBinding(ReqUserBinding reqUserBinding);

    /**
     * 验证、绑定、解绑第三方账号
     * @param reqUserLogin
     * @return
     */
    APIResponse validBindingThirdAccount(ReqUserLogin reqUserLogin);

    /**
     * 用户cookies验证
     * @param uid
     * @return
     */
    APIResponse validateCookies(int uid);

    /**
     * 用户公共注册
     * @param phone 手机号
     * @param password 密码
     * @param appChannel 用户渠道
     * @return TbUser 用户信息
     */
    TbUser commonRegister(String phone,String password,String appChannel,byte regType,String nickname,String icon,byte gender,String IDFA);

    /**
     * 用户公共登录
     * @param userCookiesName
     * @param user
     * @param isNewUser
     * @param devToken
     * @param clientId
     * @param devType
     * @return
     */
    RespUserLogin commonLogin(String userCookiesName,TbUser user,byte isNewUser,String devToken,String clientId,int devType,String appid);

    /**
     * 获取用户绑定信息
     * @param uid
     * @param larkAppId
     * @return
     */
    APIResponse<RespUserBindingInfo> bindingList(int uid, int larkAppId);

    /**
     * 退出登录
     * @param map
     * @return
     */
    APIResponse<RespUserCookiesName> logout(Map map);

    /**
     * 达人B端登录
     * @param reqDarenLogin
     * @return
     */
    APIResponse<RespUserLogin> darenLogin(ReqDarenLogin reqDarenLogin);
}
